home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d16 / winvn060.arc / WVMAIL.C < prev    next >
C/C++ Source or Header  |  1991-07-01  |  7KB  |  260 lines

  1. /*--- WVMAIL.C ------------------------------------------------------------
  2.  *
  3.  *    This file contains the window procedure for the windows
  4.  *    used to edit outgoing mail messages.
  5.  *
  6.  *    Mark Riordan   11 June 1991
  7.  */
  8.  
  9. #include "windows.h"
  10. #include "wvglob.h"
  11. #include "winvn.h"
  12. #ifndef MAC
  13. #include "winundoc.h"
  14. #endif
  15.  
  16. long FAR PASCAL WinVnMailWndProc(hWnd, message, wParam, lParam)
  17. HWND hWnd;
  18. unsigned message;
  19. WORD wParam;
  20. LONG lParam;
  21. {
  22.     HMENU hMenu;
  23.  
  24.     PAINTSTRUCT ps;                              /* paint structure          */
  25.  
  26.     HDC hDC;                                    /* handle to display context */
  27.     HWND hWndMail, hWndMailEdit;
  28. #ifdef MAC
  29.    TEHandle TEH;
  30.    Rect myClipRect;
  31. #endif
  32.     HDC  hDCView;
  33.     int ih,j;
  34.     int found;
  35.     int imemo;
  36.    TypDoc *MyDoc;
  37.     char mesbuf[348];  /*** debug */
  38.  
  39.     for(ih=0,found=FALSE; !found && ih<MAXMAILWNDS; ih++) {
  40.       if(hWndMails[ih] == hWnd) {
  41. #ifndef MAC
  42.          hWndMailEdit = hWndMailEdits[ih];
  43. #else 
  44.          TEH = TEHMails[ih];
  45. #endif
  46.          found = TRUE;
  47.          break;
  48.       }
  49.     }
  50.    if(!found && message == WM_CREATE) {
  51.       for(ih=0; !found && ih<MAXVIEWS; ih++) {
  52.          if(!hWndMails[ih]) {
  53.             found = TRUE;
  54.             hWndMails[ih] = hWnd;
  55.             break;
  56.           }
  57.       }
  58.    }
  59. #if 0
  60.    if(!found) {
  61.       MessageBox(hWnd,"Can't find Mail hWnd","Error!",MB_OK|MB_ICONHAND);
  62.       DestroyWindow(hWnd);
  63.       return(NULL);  /*** ? */
  64.    }
  65. #endif
  66.  
  67.    switch (message) {
  68.       case WM_SYSCOMMAND:
  69.          return (DefWindowProc(hWnd, message, wParam, lParam));
  70.  
  71.       case WM_CREATE:
  72. #ifndef MAC
  73.             hWndMailEdit = hWndMailEdits[ih] = CreateWindow("edit", (char *)NULL,
  74.                 WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | WS_BORDER
  75.                     | ES_LEFT | ES_MULTILINE |
  76.                     ES_AUTOHSCROLL | ES_AUTOVSCROLL
  77.                     ,
  78.                 0, 0, 0, 0,
  79.                 hWnd, EDITID, hInst, NULL);
  80.             sprintf(mesbuf,"hWndMailEdits[%d] = %5d\r\n       ",ih,hWndMailEdits[ih]);
  81.        /*   MessageBox(hWnd,mesbuf,"Edit Window Results",MB_OK|MB_ICONASTERISK); */
  82.             SetWindowText(hWndMailEdits[ih],mesbuf);
  83. #endif
  84. #if 0
  85.             { long int freeHeap = FreeMem();
  86.                long int biggestBlock = MaxBlock();
  87.                long int freeStack = StackSpace();
  88.                long int el;
  89.  
  90.                el = 0;
  91.                sprintf(mesbuf,"FreeMem=%ld  MaxBlock=%ld  StackSpace=%ld",
  92.                   freeHeap,biggestBlock,freeStack);
  93.                MessageBox(hWnd,mesbuf,"Available Memory",MB_OK);
  94.             }
  95. #endif
  96.             CreatePostingText(MailDoc,hWnd,hWndMailEdit,DOCTYPE_MAIL);
  97.        /*   SetFocus(hWndEdits[ih]);  */
  98.             break;
  99.  
  100.       case WM_SIZE:
  101. #ifndef MAC
  102.             MoveWindow(hWndMailEdit, 0, 0, LOWORD(lParam),
  103.                 HIWORD(lParam), TRUE);
  104. #endif
  105.             break;
  106.  
  107.       case WM_SETFOCUS:
  108.             SetFocus(hWndMailEdit);
  109.             break;
  110.  
  111.       case WM_KEYDOWN:
  112.          if(wParam == VK_F6) {
  113.             NextWindow(&(MailDocs[ih]));
  114.          }
  115.          break;
  116.  
  117. #ifdef MAC
  118.       case WM_PAINT:
  119.          if(TEH) {
  120.             myClipRect = hWnd->portRect;
  121.             myClipRect.right -= SBarWidth;
  122.             myClipRect.bottom -= SBarWidth;
  123.             (*TEH)->viewRect = myClipRect;
  124.             TEUpdate(&myClipRect,TEH);
  125.          }
  126.          break;
  127.  
  128. #endif
  129.  
  130.       case WM_COMMAND:
  131.          switch(wParam) {
  132.             case IDM_CANCEL:
  133.             case IDV_EXIT:
  134.                DestroyWindow(hWnd);
  135.                break;
  136.  
  137.             case IDM_POST:
  138.                StartMail(ih);
  139.                break;
  140.  
  141.             case IDM_UNDO:
  142.                SendMessage(hWndMailEdit, WM_UNDO, 0, 0L);
  143.                break;
  144.  
  145.             case IDM_CUT:
  146.                SendMessage(hWndMailEdit, WM_CUT, 0, 0L);
  147.                break;
  148.  
  149.             case IDM_COPY:
  150.                SendMessage(hWndMailEdit, WM_COPY, 0, 0L);
  151.                break;
  152.  
  153.             case IDM_PASTE:
  154.                SendMessage(hWndMailEdit, WM_PASTE, 0, 0L);
  155.                break;
  156.  
  157.             case IDM_CLEAR:
  158.                SendMessage(hWndMailEdit, WM_CLEAR, 0, 0L);
  159.                break;
  160.  
  161.             case IDM_SELALL:
  162.                SendMessage(hWndMailEdit, EM_SETSEL, 0,
  163.                 MAKELONG(0,32767));
  164.                break;
  165.          }
  166.          break;
  167.  
  168.  
  169.         case WM_DESTROY:
  170.             hWndMails[ih] = 0;
  171. #ifndef MAC
  172.             hWndMailEdits[ih] = 0;
  173. #else
  174.             TEDispose(TEHMails[ih]);
  175.             TEHMails[ih] = (TEHandle) 0;
  176.             TEHCurrent = 0;
  177. #endif
  178.             break;
  179.  
  180.  
  181.         default:
  182.             return (DefWindowProc(hWnd, message, wParam, lParam));
  183.     }
  184.     return (0L);
  185. }
  186.  
  187. /*--- function StartMail ----------------------------------------------
  188.  *
  189.  *    Start the Mailing procedure for an article that has been created
  190.  *    by the user.
  191.  *
  192.  *    Entry    ih    is the index into hWndMailEdits of the child
  193.  *                   edit window containing the article.
  194.  */
  195. BOOL
  196. StartMail(ih)
  197. int ih;
  198. {
  199.    BOOL found;
  200.    BOOL MailOK = FALSE, got_To = FALSE;
  201.    char outline[MAXOUTLINE], cmdline[MAXOUTLINE];
  202.    char *editptr, *outptr, *cptr;
  203.    HANDLE hEditBuffer;
  204.    HWND hWndMailEdit = hWndMailEdits[ih];
  205.    int linelen;
  206.  
  207.    if(CommBusy) {
  208.       MessageBox(hWndMails[ih],"Sorry, I am already busy retrieving information from the server.\n\
  209. Try again in a little while.","Can't mail message right now",MB_OK|MB_ICONASTERISK);
  210.    } else {
  211.       CommLinePtr = CommLineIn;
  212.       CommBusy = TRUE;
  213.       CommState = ST_MAIL_WAIT_PERMISSION;
  214.       CommDoc =  &(MailDocs[ih]);
  215.  
  216.       /* Create XMAIL command.  We need to extract the "To:" line
  217.        * in order to find the recipient for the command.
  218.        */
  219. #ifndef MAC
  220.       hEditBuffer = (HANDLE) SendMessage(hWndMailEdit,EM_GETHANDLE,0,0L);
  221.       editptr = LocalLock(hEditBuffer);
  222. #else
  223.       hEditBuffer = TEGetText(TEH);
  224.       editptr = LocalLock(hEditBuffer);
  225.       editptr[(*TEH)->teLength] = '\0';
  226.    
  227. #ifdef MRRBUG
  228.       sprintf(outline,"MailText after TEGetText, editptr=%.30s",editptr);
  229.       MessageBox((HWND) 0,outline,"",MB_OK);
  230. #endif
  231.  
  232. #endif
  233.       while(!got_To && *editptr) {
  234.          for(linelen = 0, outptr = outline; *editptr && *editptr!='\r' &&
  235.            linelen < MAXOUTLINE; linelen++) *(outptr++) = *(editptr++);
  236.          *outptr = '\0';
  237.          if(CompareStringNoCase(outline,"To: ",4)==0) {
  238.             got_To = TRUE;
  239.          }
  240.       }
  241.       LocalUnlock(hEditBuffer);
  242.  
  243.       if(!got_To) {
  244.          MessageBox(hWndMails[ih],"Fill in the \"To:\" line","Need a recipient",
  245.            MB_OK|MB_ICONHAND);
  246.       } else {
  247.          outptr = outline;
  248.          NextToken(&outptr);
  249.          strcpy(cmdline,"xMail ");
  250.          for(cptr=cmdline+strlen(cmdline);
  251.            *outptr>' ' && cptr-cmdline<MAXOUTLINE;
  252.            *(cptr++) = *(outptr++));
  253.          *cptr = '\0';
  254.          PutCommLine(cmdline,strlen(cmdline));
  255.          MailOK = TRUE;
  256.       }
  257.    }
  258.    return(MailOK);
  259. }
  260.